package generic;

import utils.Log;

import static generic.Tuple.tuple;


public class TupleTest2 {
    static TwoTuple<String, Integer> f() {
        return tuple("hi", 47);
    }

    /**
     * 在这里例子中，编译器并没有关于f2()的警告信息，因为我们并没有将其返回值作为参数化对象使用。
     * 在某种意义上，它被向上转型为一个非参数化的 TwoTuple. 然后，如果试图将f2()的返回值转型为参数化的 TwoTuple， 编译器就会发出警告
     * @return
     */
    static TwoTuple f2() {
        return tuple("hi", 47);
    }

    static ThreeTuple<Amphibian, String, Integer> g() {
        return tuple(new Amphibian(), "hi", 47);
    }

    static FourTuple<Vehicle, Amphibian, String, Integer> h() {
        return tuple(new Vehicle(), new Amphibian(), "hi", 47);
    }

    static FiveTuple<Vehicle, Amphibian, String, Integer, Double> k() {
        return tuple(new Vehicle(), new Amphibian(), "hi", 47, 11.1);
    }

    public static void main(String[] args) {
        TwoTuple<String, Integer> ttsi = f();
//        ttsi.first = "there";
        Log.vn(ttsi);
        Log.vn(f2());
        Log.vn(g());
        Log.vn(h());
        Log.vn(k());

    }

}
